package logger

import (
	"io/ioutil"
	"log"
	"os"
	"strings"
	"time"
)

const logDir string = "./storage/logs/"

// 信息
func Info(message any) {
	printFile("[INFO]", message)
}

// 警告信息
func Warn(message any) {
	printFile("[WARN]", message)
}

// 错误信息
func Error(message any) {
	printFile("[ERROR]", message)
}

// 删除旧日志文件
func DeleteOldLogs() {
	// 读取日志文件内的文件
	files, _ := ioutil.ReadDir(logDir)

	// 定义7天前时间
	sevenDays := time.Now().AddDate(0, 0, -7).Format(time.DateOnly)
	for _, file := range files {
		// 日志文件路径
		filePath := logDir + file.Name()
		// 切割日志文件
		fileSplit := strings.Split(file.Name(), ".")

		if sevenDays > fileSplit[0] {
			// 移除/删除日志文件
			if err := os.Remove(filePath); err != nil {
				Info(map[string]interface{}{
					"message": "日志文件删除失败",
					"err":     err,
					"file":    filePath,
				})
			} else {
				Info(map[string]interface{}{
					"message":  "删除旧的日志文件",
					"name":     file.Name(),
					"filePath": filePath,
				})
			}
		}
	}
}

// 打印日志写入日志文件
func printFile(level string, message any) {
	t := time.Now().Format(time.DateOnly)
	filePaht := logDir + t + ".log"
	// 创建日志文件
	os.MkdirAll(logDir, os.ModePerm) // 创建日志文件夹
	file, err := os.OpenFile(filePaht, os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)
	if err != nil {
		Error(map[string]interface{}{
			"err":     err,
			"message": "打开日志文件失败",
		})
		return
	}
	defer file.Close()

	// 设置日志输出到文件
	log.SetOutput(file)

	// 打印信息
	log.Println(level, message)
}
